﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DG.Common.Patterns.MVVM;
using TCC.ControleFluxoDeCaixa.Model.Entities;
using TCC.ControleFluxoDeCaixa.Model.Usuarios;

namespace TCC.ControleFluxoDeCaixa.Model.Gerenciadores
{
    public class AutenticadorDeSessao : NotifyViewModel
    {
        private static AutenticadorDeSessao _singletonInsance;
        private Session _currentSession;

        public Session CurrentSession
        {
            get { return _currentSession; }
            set
            {
                if (Equals(value, _currentSession)) return;
                _currentSession = value;
                OnPropertyChanged("CurrentSession");
                OnPropertyChanged("UsuarioEstaLogado");
            }
        }

        public bool Login(FluxoDeCaixaContextFiltrado context, String login, String senha)
        {
            try
            {
                var u = context.Usuarios.FirstOrDefault(c => c.Login.ToLower() == login.ToLower() && c.Senha == senha);

                if (u == null)
                {
                    return false;
                }
                else
                {
                    CurrentSession = new Session(u, DateTime.Now);
                }
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public void Logoff()
        {
            CurrentSession = null;
        }

        public static AutenticadorDeSessao GetInstance()
        {
            return _singletonInsance ?? (_singletonInsance = new AutenticadorDeSessao());
        }

        public class Session
        {
            public Usuario Usuario { get; set; }

            public DateTime DateLogin { get; set; }

            public Session(Usuario usuario, DateTime dateLogin)
            {
                Usuario = usuario;
                DateLogin = dateLogin;
            }
        }

        public bool UsuarioEstaLogado
        {
            get
            {
                return  CurrentSession != null;
            }
        }
    }

    
}
